/*
 * IDBConnection.h
 *
 *  Created on: 05.06.2012
 *      Author: Caffeine
 */

#ifndef IDBCONNECTION_H_
#define IDBCONNECTION_H_


#include "IResult.h"
#include <lampe/types.h>
#include <lampe/IReferenceCounted.h>

namespace lampe {
namespace db {

/**
 * @class IDBConnection
 * Класс осуществляющий соединение с базой данных, а так же выполнение запросов
 */
class IDBConnection:public lampe::IReferenceCounted {
private:
	///страка соединения с базой данных
	String connect_line;
protected:
	/**
	 * Возвращяет команду соединения
	 *
	 * @return команда соединения с БД
	 */
	String getConnectLine(){
		return connect_line;
	}
public:
	/**
	 * Конструктор
	 */
	IDBConnection(){
		setConnectParams("");
	}

	/**
	 * Диструктор
	 */
	virtual ~IDBConnection(){}

	/**
	 * Устанавливает параметры подключения
	 *
	 * @param params перечесление все параетров подключения в виде строки. Например "host=127.0.0.1 port=5432"
	 * */
	void setConnectParams(lampe::String params){
		connect_line=params;
	}

	/**
	 * Выполняет запрос и возвращяет результат
	 *
	 * @param query строка запроса
	 * @return результат запроса
	 * */
	virtual IResult*exe(lampe::String query,s32 start=-1,u32 count=0)=0;

	/**
	 * Выполняет запрос
	 *
	 * @param query строка запроса
	 * */
	virtual void exeQuery(lampe::String query){
		IResult*res=exe(query);
		if (res)
			res->drop();
	}

	/**
	 * Открывает соединение с сервером БД
	 *
	 * @return TRUE если соединение успешно открыто, иначе FALSE
	 * */
	virtual bool open()=0;

	/**
	 * Закрывает соедиение с сервером БД
	 * */
	virtual void close()=0;

	/**
	 * Возварщяет установлино ли соединение
	 *
	 * @return TRUE если соединение установленно, иначе FALSE
	 * */
	virtual bool isConnected()=0;

	virtual String TableName(lampe::String tableName)=0;
	virtual String StringValue(lampe::String stringValue)=0;
	virtual String ColomnName(lampe::String colomnName)=0;

};

} /* namespace db */
} /* namespace lampe */
#endif /* IDBCONNECTION_H_ */
